export TOPDIR=$(shell pwd)
export INCLUDE_DIR=$(TOPDIR)/include
export APP_DIR=$(TOPDIR)/app
export LIB_DIR=$(TOPDIR)/libs
export BIN_DIR=$(TOPDIR)/bins
export TESTBINS_DIR=$(BIN_DIR)
export UTIL_DIR=$(TOPDIR)/utils

####################################################################
#导出编译器配置选项
####################################################################
#如果交叉编译，只需要配置下编译器路径即可
export CROSS_COMPILE=
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export LD=${CROSS_COMPILE}ld
export AR=${CROSS_COMPILE}ar
export AS=${CROSS_COMPILE}as
export NM=${CROSS_COMPILE}nm
export OBJCOPY=${CROSS_COMPILE}objcopy
export OBJDUMP=${CROSS_COMPILE}objdump
export STRIP=${CROSS_COMPILE}strip

#非常通用的编译选项及头文件目录
UCFLAGS := -Wall -O2 -c -std=gnu99
UCFLAGS	+= -I$(TOPDIR) -I$(INCLUDE_DIR) -I$(UTIL_DIR)

UCPPFLAGS := -Wall -O2 -c -std=gnu++11
UCPPFLAGS += -I$(TOPDIR) -I$(INCLUDE_DIR) -I$(UTIL_DIR)

#非常通用的链接选项及库文件目录
ULDFLAGS := -lhqutils -lm -lpthread -lmodbus
ULDFLAGS += -L$(LIB_DIR)
export UCFLAGS UCPPFLAGS ULDFLAGS

####################################################################
#帮助信息
####################################################################
help:
	@echo "==================================Make help start=================================="
	@echo "make all[clean]              编译/清除整个工程"
	@echo "make app[clean]              编译/清除所有的应用层程序"
	@echo "make app[clean] tag=name     编译/清除application下的某一个应用，name是应用的文件夹名字"
	@echo "make test[clean]             编译/清除测试应用层程序"
	@echo "make test[clean] tag=name    编译/清除test下的某一个应用，name是应用的文件夹名字"	
	@echo "make utils[clean]            编译/清除组件库"
	@echo "==================================Make help end===================================="


####################################################################
#各个目标
####################################################################
all:utils test app
allclean:utilsclean testclean appclean tmpclean

.PHONY:utils
utils:
	make -C ${UTIL_DIR}
utilsclean:
	make -C ${UTIL_DIR} clean

.PHONY:app
app:
	make -C ${APP_DIR} app
appclean:
	make -C ${APP_DIR} appclean

.PHONY:test
test:
	make -C ${TEST_DIR} test
testclean:
	make -C ${TEST_DIR} testclean

tmpclean:
	rm ${LIB_DIR}/* -rf	
	rm ${BIN_DIR}/* -rf


####################################################################
#安装目标
####################################################################
install_x86:x86_dir install_so

install_so:
	sudo cp -d $(LIB_DIR)/*.so* /usr/lib/

install_json:
	sudo cp $(APP_DIR)/res/*.json /mnt/config/nv

x86_dir:
	mkdir /tmp/ipc/unixsock -p
	mkdir /tmp/ipc/msgqueue -p
	mkdir /tmp/ipc/shmem -p
	mkdir /tmp/ipc/msgqueue/peer -p
	chmod 777 /tmp/ipc/unixsock
	chmod 777 /tmp/ipc/msgqueue
	chmod 777 /tmp/ipc/shmem
	chmod 777 /tmp/ipc/msgqueue/peer
	sudo mkdir /mnt/config/nv -p
	sudo chmod 777 /mnt/config/nv

